package com.towker.core.db;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.jws.WebService;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.towker.core.page.PageModel;
import com.towker.core.page.PageRequest;


/**
 * 服务基础类
 */

public abstract class BaseService<E, PK extends Serializable>
{
	protected Log log = LogFactory.getLog(getClass());

	/**
	 * 需要被子类覆盖
	 * @return
	 */
	protected abstract EntityDao getEntityDao();

	/**
	 * 添加对象
	 * @param entity
	 */
	public void add(E entity)
	{
		getEntityDao().add(entity);
	}

	/**
	 * 根据主键删除对象
	 * @param id
	 */
	public void delById(PK id)
	{
		getEntityDao().delById(id);
	}

	/**
	 * 根据主键批量删除对象
	 * @param ids
	 */
	public void delByIds(PK[] ids)
	{
		if (ids != null && ids.length > 0)
		{
			for (PK p : ids)
			{
				delById(p);
			}
		}
	}

	/**
	 * 修改对象
	 * @param entity
	 */
	public void update(E entity)
	{
		getEntityDao().update(entity);
	}

	/**
	 * 根据主键Id获取对象
	 * @param id
	 * @return
	 */
	public E getById(PK id)
	{
		return (E) getEntityDao().getById(id);
	}
	


	/**
	 * 得到分页模型
	 * @param currentPage
	 * @param pageSize
	 * @param map
	 * @return
	 */
	public PageModel getPage(int currentPage, int pageSize, Map map)
	{
		PageRequest request = new PageRequest();
		request.setFilters(map);
		request.setCurrentPage(currentPage);
		request.setPageSize(pageSize);
		PageModel page = getEntityDao().getPage(request);
		return page;
	}

	/**
	 * 得到分页模型
	 * @param pageRequest
	 * @return
	 */
	public PageModel getPage(PageRequest request)
	{
		PageModel page = getEntityDao().getPage(request);
		return page;
	}

	/**
	 * 取得全部数据
	 * @param map
	 * @return
	 */
	public List getList(Map map)
	{
		PageRequest request = new PageRequest();
		request.setFilters(map);
		List list = getEntityDao().getList(request);
		return list;
	}

	/**
	 * 取得全部数据
	 * @param pageRequest
	 * @return
	 */
	public List getList(PageRequest request)
	{
		List list = getEntityDao().getList(request);
		return list;
	}
}
